package cn.patient.pp.module.report.service;

import cn.patient.pp.framework.common.pojo.CommonResult;
import cn.patient.pp.framework.security.core.LoginUser;
import cn.patient.pp.module.report.controller.admin.vo.PatientInfoPageReqVO;
import cn.patient.pp.module.report.controller.admin.vo.PatientInfoSaveReqVO;
import cn.patient.pp.module.report.dal.dataobject.report.PatientInfoDO;
import cn.patient.pp.module.report.service.*;
import java.util.*;
import javax.validation.*;
import cn.patient.pp.framework.common.pojo.PageResult;
import cn.patient.pp.framework.common.pojo.PageParam;

/**
 * 上报精神病患者信息 Service 接口
 *
 * @author 超级管理员
 */
public interface PatientInfoService {

    /**
     * 创建精神病患者信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    CommonResult<Long> createPatientInfo(@Valid PatientInfoSaveReqVO createReqVO, LoginUser loginUser);

    /**
     * 街道更新上报精神病患者信息
     *
     * @param updateReqVO 更新信息
     */
    CommonResult<Boolean> updatePatientInfo(@Valid PatientInfoSaveReqVO updateReqVO);

    /**
     * 上报精神病患者信息
     *
     * @param updateReqVO 更新信息
     */
    CommonResult<Boolean> updatePatientInfoReport(@Valid PatientInfoSaveReqVO updateReqVO, LoginUser loginUser);

    /**
     * 撤回精神病患者信息
     *
     * @param updateReqVO 更新信息
     */
    CommonResult<Boolean> updatePatientInfoReturn(@Valid PatientInfoSaveReqVO updateReqVO);
    /**
     * 县区更新精神病患者症状信息
     *
     * @param updateReqVO 更新信息
     */
    void updatePatientInfoDiagnosis(@Valid PatientInfoSaveReqVO updateReqVO);

    /**
     * 删除上报精神病患者信息
     *
     * @param id 编号
     */
    void deletePatientInfo(Long id);

    /**
     * 获得上报精神病患者信息
     *
     * @param id 编号
     * @return 上报精神病患者信息
     */
    PatientInfoDO getPatientInfo(Long id);

    /**
     * 获得乡镇上报精神病患者信息分页
     *
     * @param pageReqVO 分页查询
     * @return 上报精神病患者信息分页
     */
    PageResult<PatientInfoDO> getPatientInfoPageByTown(PatientInfoPageReqVO pageReqVO);
    /**
     * 获得县区的上报精神病患者信息分页
     *
     * @param pageReqVO 分页查询
     * @return 上报精神病患者信息分页
     */
    PageResult<PatientInfoDO> getPatientInfoPageByCounty(PatientInfoPageReqVO pageReqVO);

}